home *** CD-ROM | disk | FTP | other *** search
/ Magnum One / Magnum One (Mid-American Digital) (Disc Manufacturing).iso / d7 / litecom6.arc / LCLIB.EXE / LITECOMM.H < prev    next >
Text File  |  1991-07-24  |  10KB  |  306 lines

  1. /*
  2. **    litecomm.h
  3. **        Communications support for Datalight (tm) C
  4. **        Copyright (c) 1987 - 1991 - Information Technology, Ltd.,
  5. **                             All Rights Reserved
  6. **  Revisions -
  7. **        01        01/08/88    Modify for DLC 3.21
  8. **                            remove lc_sbrk define
  9. **        2.70    02/25/88    abandon DLC support
  10. **        5.00    02/10/89    change CCB definition for new txready
  11. **                            add define for lc_vport
  12. **        6.00    04/24/91    change CCB definition to add support
  13. **                            for status buffer, change variable sizes
  14. **                            far pointers for single ISR
  15. */
  16.  
  17. #ifndef TRUE
  18. #define TRUE 1
  19. #endif
  20. #ifndef FALSE
  21. #define FALSE 0
  22. #endif
  23. #define ERR (-1)
  24.  
  25. #include <stddef.h>
  26.  
  27. #ifndef LITECOMM_H                /* if not already included        */
  28. #define LITECOMM_H    1
  29.  
  30. #define COM1BASE    0x3f8        /* base for com port 1 */
  31. #define COM2BASE    0x2f8        /* base for com port 2 */
  32. #define IRQ1        0x10        /* int req mask for port 1 - irq4 */
  33. #define IRQ2        0x08        /* int req mask for port 2 - irq3 */
  34. #define COM1VEC        0x0c        /* vector for port 1 */
  35. #define COM2VEC        0x0b        /* vector for port 2 */
  36.  
  37. extern unsigned COM3BASE;
  38. extern unsigned COM4BASE;
  39. extern char IRQ3;
  40. extern char IRQ4;
  41. extern unsigned COM3VEC;
  42. extern unsigned COM4VEC;
  43.  
  44. /*
  45. **    special control characters
  46. */
  47. #define    XON        0x11
  48. #define    XOFF    0x13
  49.  
  50. /*
  51. **    8250 register defines (offsets from base)
  52. */
  53. #define    THREG    0                /* transmit hold register */
  54. #define RDREG    0                /* input data register */
  55. #define LSBDIV    0                /* least sig. byte of baud rate divisor */
  56. #define MSBDIV    1                /* most sig, only when line ctl bit 7 = 1 */
  57. #define IEREG    1                /* interrupt enable register */
  58. #define IIDREG    2                /* interrupt ID register */
  59. #define LCREG    3                /* line control register */
  60. #define MCREG    4                /* modem control register */
  61. #define LSREG    5                /* line status register */
  62. #define MSREG    6                /* modem status register */
  63.  
  64. /*
  65. **    PARITY SETTINGS used in conjunction with above
  66. */
  67. #define    NPARITY    0x00            /* no parity */
  68. #define OPARITY    0x08            /* odd parity */
  69. #define EPARITY    0x18            /* even parity */
  70. #define    MPARITY    0x28            /* mark parity */
  71. #define SPARITY    0x38            /* space parity */
  72.  
  73. /*
  74. **    DATA and STOP BIT settings
  75. */
  76. #define BIT5    0x00            /* 5 data bits */
  77. #define BIT6    0x01            /* 6 data bits */
  78. #define BIT7    0x02            /* 7 data bits */
  79. #define BIT8    0x03            /* 8 data bits */
  80. #define STOP1    0x00            /* 1 stop bit */
  81. #define STOP2    0x04            /* 2 stop bit */
  82.  
  83. /*
  84. ** setting for hardware flow control
  85. */
  86. #define USEDSR    0x01
  87. #define USECTS    0x02
  88. #define USEDTR    0x04
  89. #define USERTS    0x08
  90.  
  91. /*
  92. ** SPECIAL PURPOSE SETTINGS - internal use only
  93. */
  94. #define    BREAK_ON 0x40            /* enable transmitter break */
  95. #define    SETBAUD    0x80            /* enable access to baud rate divisor */
  96.  
  97. #define    DTR        0x01            /* turn on DTR modem signal */
  98. #define RTS        0x02            /* turn on RTS modem signal */
  99. #define    OUT2    0x08            /* enable OUT2 for interrupts */
  100. #define    LOOPBACK 0x10            /* enable loopback mode */
  101.  
  102. #define    RDINT    0x01            /* enable receive data int */
  103. #define    THREINT    0x02            /* enable transmit hold reg empty int */
  104. #define    BRKINT    0x04            /* enable break/error int */
  105. #define    MSTINT    0x08            /* enable modem change int */
  106.  
  107. #define NOPEND    0x01            /* no interrupts pending */
  108. #define INTMST    0x00            /* modem change int */
  109. #define    INTTHRE    0x02            /* THRE int */
  110. #define    INTRD    0x04            /* receive data int */
  111. #define    INTBRK    0x06            /* break/error int */
  112.  
  113. /*
  114. **    line status register values
  115. */
  116. #define    RDRDY    0x01            /* receive data ready */
  117. #define ORUNERR    0x02            /* over-run error */
  118. #define    PARERR    0x04            /* parity error */
  119. #define FRMERR    0x08            /* framing error */
  120. #define    BRKDET    0x10            /* break detect */
  121. #define THREMP    0x20            /* transmit hold reg empty */
  122. #define TSREMP    0x40            /* transmit shift reg empty */
  123. #define TIMEOUT    0x80            /* timeout */
  124.  
  125. /*
  126. **    modem status register values
  127. **        Bits 0 - 3 define which signal(s) have changed
  128. **                   with a value of 1 indicating a change has occurred
  129. **        Bits 4 - 7 indicate the current state of each of the 4 signals
  130. */
  131. #define    CTSCHG    0x01            /* delta CTS */
  132. #define DSRCHG    0x02            /* delta DSR */
  133. #define    RICHG    0x04            /* delta RI */
  134. #define    DCDCHG    0x08            /* delta DCD */
  135. #define    CTS        0x10            /* Clear To Send */
  136. #define DSR        0x20            /* Data Set Ready */
  137. #define RI        0x40            /* Ring Indicator */
  138. #define DCD        0x80            /* Data Carrier Detect */
  139.  
  140. /*
  141. ** macros for litecomm
  142. */
  143. #define lc_setdtr(x) (lc_setmdm(x, DTR))
  144. #define lc_setrts(x) (lc_setmdm(x, RTS))
  145. #define lc_gotcts(x) (lc_mstat(x) & CTS)
  146. #define lc_gotdsr(x) (lc_mstat(x) & DSR)
  147. #define lc_gotri(x) (lc_mstat(x) & RI)
  148. #define lc_gotdcd(x) (lc_mstat(x) & DCD)
  149. #define lc_gotctschg(x) (lc_mstat(x) & CTSCHG)
  150. #define lc_gotdsrchg(x) (lc_mstat(x) & DSRCHG)
  151. #define lc_gotrichg(x) (lc_mstat(x) & RICHG)
  152. #define lc_gotdcdchg(x) (lc_mstat(x) & DCDCHG)
  153. #define lc_vport(x) (ports[(x-1)&0x0f])
  154.  
  155. /*
  156. ** defines to resolve differences between MSC and TURBOC
  157. ** semantics
  158. */
  159. #ifdef M_I86
  160. #define IVPTR(x) void (interrupt far *x)()
  161. #define getvect(x) _dos_getvect(x)
  162. #define setvect(x,y) _dos_setvect(x,y)
  163. #define enable _enable
  164. #define disable _disable
  165. #define inportb(x) inp(x)
  166. #define outportb(x,y) outp(x,y)
  167. #define MK_FP(seg,ofs)    ((void far *) \
  168.                (((unsigned long)(seg) << 16) | (unsigned)(ofs)))
  169. #endif
  170.  
  171. #ifdef __TURBOC__
  172. #define IVPTR(x) void interrupt (*x)()
  173. #endif
  174.  
  175. #ifdef M_I86
  176. #pragma pack(1)
  177. #endif
  178. typedef    struct
  179. {
  180.     IVPTR(orgvect);                         /* original vector */
  181.     unsigned                orgirq;            /* original irq settings */
  182.     unsigned                baseport;        /* baseline port */
  183.     unsigned                pvector;        /* int vector for port */
  184.     unsigned                pirq;            /* port int req mask */
  185.     volatile unsigned char    mdmstat;        /* current modem status */
  186.     unsigned char            mdmctlr;        /* current modem control values */
  187.     volatile unsigned char    lasterr;        /* last error return */
  188.     volatile unsigned char    brkrecd;          /* break was detected */
  189.     volatile unsigned char    txready;        /* TRUE if tranmitter available */
  190.     unsigned                intmask;        /* current active ints */
  191.     char                far    *inbuff;        /* input ring buffer */
  192.     char                far    *inbuffend;        /* internal calcs */
  193.     int                     inbuflen;        /* size of buffer */
  194.     volatile int            inbufcnt;        /* chars in buffer now */
  195.     int                        inbufmrk;        /* trigger point for xoff */
  196.     int                        inbufres;        /* resume point for xoff */
  197.     volatile char        far    *inhead;        /* pointer to insert */
  198.     volatile char        far    *intail;        /* pointer to remove */
  199.     char                far    *stbuff;        /* status ring buffer */
  200.     char                far    *stbuffend;        /* internal calcs */
  201.     volatile char        far    *sthead;        /* pointer to insert */
  202.     volatile char        far    *sttail;        /* pointer to remove */
  203.     unsigned char            swflow;            /* TRUE if XON/XOFF active */
  204.     unsigned char            swstop;            /* STOP flow control char */
  205.     unsigned char            swstart;        /* START flow control char */
  206.     volatile unsigned char    inxrecd;        /* TRUE if XOFF rec'd */
  207.     volatile unsigned char    outxsent;        /* TRUE if XOFF sent */
  208.     unsigned char            hwfrec;         /* hardware flow signals */
  209.     unsigned char            hwfrecmask;        /* mask to use when hardware flow is ON */
  210.     unsigned char            hwfxmit;        /* hardware flow signals */
  211.     unsigned char            hwfxmitmask;    /* mask to use when hardware flow is OFF */
  212.     volatile unsigned char    hwfoff;            /* save state of hw flow control  */
  213.     char                far    *outbuff;        /* output ring buffer */
  214.     char                far    *outbuffend;    /* internal calcs */
  215.     int                        outbuflen;        /* size of buffer */
  216.     volatile int            outbufcnt;        /* chars in buffer now */
  217.     volatile char        far    *outhead;        /* pointer to insert */
  218.     volatile char        far    *outtail;        /* pointer to remove */
  219.     int                        rch;            /* port's input char buffer */
  220.     char far                *oldstk;        /* save area for old stack */
  221.     char far                *newstk;        /* pointer to handler int stack */
  222.     char far                *stkbase;        /* pointer to base of int stack */
  223. } COMM;
  224.  
  225. #ifdef M_I86
  226. #pragma pack()
  227. #endif
  228.  
  229. extern COMM far *ports[16];
  230. extern unsigned _lc_error;                    /* error variable in lcsetup */
  231.  
  232. #undef USEHUGE
  233.  
  234. #ifdef M_I86
  235. #ifdef M_I86CM
  236. #define USEHUGE
  237. #endif
  238.  
  239. #ifdef M_I86LM
  240. #define USEHUGE
  241. #endif
  242. #endif
  243.  
  244. #ifdef __TURBOC__
  245. #ifdef __COMPACT__
  246. #define USEHUGE
  247. #endif
  248.  
  249. #ifdef __LARGE__
  250. #define USEHUGE
  251. #endif
  252. #endif
  253.  
  254. /*
  255. ** function prototypes
  256. */
  257.  
  258. int _portchg(unsigned, unsigned, char, unsigned);
  259. void _lc_closeall(void);
  260. int    comm_opn(unsigned,long,unsigned,unsigned,unsigned,unsigned,unsigned,unsigned);
  261. int comm_setup(unsigned, long, unsigned, unsigned, unsigned);
  262. int comm_close(unsigned, unsigned);
  263. int far comm_put(COMM far *, unsigned char);
  264. int comm_get(COMM far *ccb);
  265. void far commtx(COMM far *);
  266. void far sendbyte(COMM far *, unsigned char);
  267.  
  268. int    lc_get(unsigned);
  269. int lc_getstat(unsigned, char *, char *);
  270. int    lc_put(unsigned, unsigned char);
  271. int lc_peek(unsigned);
  272. unsigned char lc_estat(unsigned);
  273. int    lc_getw(unsigned);
  274. int lc_icnt(unsigned);
  275. int lc_ocnt(unsigned);
  276. int    lc_setmdm(unsigned,unsigned);
  277. int    lc_clrmdm(unsigned,unsigned);
  278. int    lc_togmdm(unsigned,unsigned);
  279. unsigned char lc_mstat(unsigned);
  280. int lc_gets(unsigned,unsigned char *, int);
  281. int lc_puts(unsigned,unsigned char *, int);
  282. int    lc_getw(unsigned);
  283. int lc_tflush(unsigned);
  284. int lc_rflush(unsigned);
  285. void lc_flshtrue(unsigned, unsigned char);
  286. int lc_nflush(unsigned, int);
  287. int lc_xoff(unsigned,int);
  288. int lc_gotxoff(unsigned);
  289. int lc_putxoff(unsigned);
  290. int lc_setxoff(unsigned, unsigned char);
  291. int lc_setxon(unsigned, unsigned char);
  292. int lc_sethwflow(unsigned, unsigned char);
  293. int lc_clearhwflow(unsigned);
  294. int lc_puthwstop(unsigned);
  295. int lc_gothwstop(unsigned);
  296. int    lc_sbrk(unsigned);
  297. int lc_gotbrk(unsigned);
  298. /*
  299. ** miscellaneous functions
  300. */
  301. int wait(unsigned, int, unsigned char);
  302. void purge(unsigned);
  303. #endif
  304.  
  305. #include "litecomm.err"
  306.